{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n"
     ]
    }
   ],
   "source": [
    "import os, sys, inspect, time\n",
    "\n",
    "import numpy as np\n",
    "import torch \n",
    "import matplotlib.pyplot as plt\n",
    "torch.multiprocessing.set_sharing_strategy('file_system')\n",
    "\n",
    "import discrepancy, visualization\n",
    "from algorithms import ABC_algorithms, SMCABC, SMC2ABC, SNLABC, SNL2ABC\n",
    "from problems import problem_GC\n",
    "\n",
    "import utils_os, utils_math\n",
    "\n",
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Problem Definition"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "visualizing p(x|theta)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 360x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "DIR = 'results/GC'                                             \n",
    "RERUN = not utils_os.is_file_exist(DIR, 'true_samples.npy') \n",
    "\n",
    "## Define the problem\n",
    "problem = problem_GC.Gaussian_Copula_Problem(N=500, n=200)\n",
    "true_theta = problem.get_true_theta()\n",
    "\n",
    "## Get x_o ~ p(x|theta)\n",
    "if RERUN:\n",
    "    # observed stat\n",
    "    problem.data_obs = problem.simulator(true_theta)\n",
    "    problem.y_obs = problem.statistics(data=problem.data_obs, theta=true_theta)\n",
    "    utils_os.save_object(DIR, 'data_obs', problem.data_obs)\n",
    "    utils_os.save_object(DIR, 'y_obs', problem.y_obs)\n",
    "    \n",
    "    # collect samples\n",
    "    true_samples = problem.sample_from_true_posterior()\n",
    "    utils_os.save_object(DIR, 'true_samples', true_samples)\n",
    "else:\n",
    "    true_samples = utils_os.load_object(DIR, 'true_samples.npy')\n",
    "    problem.data_obs  = utils_os.load_object(DIR, 'data_obs.npy')\n",
    "    problem.y_obs  = utils_os.load_object(DIR, 'y_obs.npy')\n",
    "    \n",
    "## Visualize the problem\n",
    "problem.visualize()\n",
    "# visualization.plot_likelihood(samples=true_samples, log_likelihood_function=problem.log_likelihood, dimensions=(0,1))\n",
    "# visualization.plot_likelihood(samples=true_samples, log_likelihood_function=problem.log_likelihood, dimensions=(1,2))\n",
    "# visualization.plot_likelihood(samples=true_samples, log_likelihood_function=problem.log_likelihood, dimensions=(0,2))\n",
    "plt.figure(figsize=(5,4))\n",
    "visualization.plot_samples(problem.data_obs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Inference"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SMC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Sequential Monte Carlo ABC\n",
    "\n",
    "hyperparams = ABC_algorithms.Hyperparams()\n",
    "hyperparams.save_dir = DIR\n",
    "hyperparams.device = 'cuda:1'\n",
    "hyperparams.num_sim = 4000                        # number of simulations\n",
    "hyperparams.num_samples = 200                     # number of samples to represent posterior\n",
    "hyperparams.L = 2                                 # number of rounds in sequential learning\n",
    "\n",
    "smc_abc = SMCABC.SMC_ABC(problem, discrepancy=discrepancy.eculidean_dist, hyperparams=hyperparams)\n",
    "smc_abc.run()\n",
    "\n",
    "JSD_smc_array = []\n",
    "for l in range(hyperparams.L):\n",
    "    print('round =', l)\n",
    "    smc_abc.posterior = smc_abc.posterior_array[l]\n",
    "    visualization.plot_likelihood(samples=true_samples, log_likelihood_function=smc_abc.log_likelihood, dimensions=(0,1))\n",
    "    JSD = discrepancy.JSD(problem.log_likelihood, smc_abc.log_likelihood, true_samples, true_samples, N_grid=30)\n",
    "    JSD_smc_array.append(JSD)\n",
    "    print('JSD smc = ', JSD)\n",
    "utils_os.save_object(DIR, 'JSD_SMC', JSD_smc_array)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Sequential Monte Carlo ABC +\n",
    "\n",
    "hyperparams = ABC_algorithms.Hyperparams()\n",
    "hyperparams.save_dir = DIR\n",
    "hyperparams.device = 'cuda:1'\n",
    "hyperparams.num_sim = 4000                       # number of simulations\n",
    "hyperparams.num_samples = 200                    # number of samples to represent posterior\n",
    "hyperparams.L = 2                                # number of learning rounds\n",
    "hyperparams.type = 'plain'                       # the network architecture of S(x)\n",
    "hyperparams.stat = 'infomax'                     # statistics function: infomax/moment/score  \n",
    "hyperparams.estimator = 'JSD'                    # MI estimator; JSD (accurate) or DC (fast)\n",
    "\n",
    "smc2_abc = SMC2ABC.SMC2_ABC(problem, discrepancy=discrepancy.eculidean_dist, hyperparams=hyperparams)\n",
    "smc2_abc.run()\n",
    "\n",
    "JSD_smc2_array = []\n",
    "for l in range(len(smc2_abc.posterior_array)):\n",
    "    print('l=', l)\n",
    "    smc2_abc.l = l\n",
    "    smc2_abc.posterior = smc2_abc.posterior_array[l]\n",
    "    visualization.plot_likelihood(samples=true_samples, log_likelihood_function=smc2_abc.log_likelihood, dimensions=(0,1))\n",
    "    JSD = discrepancy.JSD(problem.log_likelihood, smc2_abc.log_likelihood, true_samples, true_samples, N_grid=30)\n",
    "    JSD_smc2_array.append(JSD)\n",
    "    print('JSD smc2 = ', JSD)\n",
    "utils_os.save_object(DIR, 'JSD_SMC2', JSD_smc2_array)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SNL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Sequential Neural Likelihood\n",
    "hyperparams = ABC_algorithms.Hyperparams()\n",
    "hyperparams.save_dir = DIR\n",
    "hyperparams.device = 'cuda:1'\n",
    "hyperparams.num_sim = 4000\n",
    "hyperparams.L = 2\n",
    "\n",
    "print('\\n SNL ABC')\n",
    "snl_abc = SNLABC.SNL_ABC(problem, discrepancy=discrepancy.eculidean_dist, hyperparams=hyperparams)\n",
    "snl_abc.run()\n",
    "\n",
    "JSD_array = []\n",
    "for l in range(len(snl_abc.nde_array)):\n",
    "    print('l=', l)\n",
    "    snl_abc.nde_net = snl_abc.nde_array[l]\n",
    "    visualization.plot_likelihood(samples=true_samples, log_likelihood_function=snl_abc.log_likelihood, dimensions=(0,1))\n",
    "    JSD = discrepancy.JSD(problem.log_likelihood, snl_abc.log_likelihood, true_samples, true_samples, N_grid=30)\n",
    "    JSD_array.append(JSD)\n",
    "    print('JSD snl = ', JSD)\n",
    "utils_os.save_object(DIR, 'JSD_SNL', JSD_array)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "### Sequential Neural Likelihood + \n",
    "hyperparams = ABC_algorithms.Hyperparams()\n",
    "hyperparams.save_dir = DIR\n",
    "hyperparams.device = 'cuda:1'\n",
    "hyperparams.num_sim = 4000                       # number of simulations\n",
    "hyperparams.L = 2                                # number of learning rounds\n",
    "hyperparams.type = 'plain'                       # the network architecture of S(x)\n",
    "hyperparams.stat = 'infomax'                     # statistics function: infomax/moment/score  \n",
    "hyperparams.estimator = 'DC'                     # MI estimator; JSD (accurate) or DC (fast)\n",
    "hyperparams.nde = 'MAF'                          # nde; MAF (D>1) or MDN (D=1)\n",
    "\n",
    "snl2_abc = SNL2ABC.SNL2_ABC(problem, discrepancy=discrepancy.eculidean_dist, hyperparams=hyperparams)\n",
    "snl2_abc.run()\n",
    "\n",
    "JSD_array = []\n",
    "for l in range(len(snl2_abc.nde_array)):\n",
    "    print('l=', l)\n",
    "    snl2_abc.set(l=l)\n",
    "    visualization.plot_likelihood(samples=true_samples, log_likelihood_function=snl2_abc.log_likelihood, dimensions=(0,1))\n",
    "    JSD = discrepancy.JSD(problem.log_likelihood, snl2_abc.log_likelihood, true_samples, true_samples, N_grid=30)\n",
    "    JSD_array.append(JSD)\n",
    "    print('JSD snl+ = ', JSD)\n",
    "utils_os.save_object(DIR, 'JSD_SNL2', JSD_array)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
